package com.bingbaihanji.hibernate;

import com.bingbaihanji.hibernate.pojo.User;
import com.bingbaihanji.hibernate.util.HibernateUtil;
import lombok.extern.slf4j.Slf4j;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

@Slf4j
public class Main {
    public static void main(String[] args) throws InterruptedException {


        // 增加
//        try (
//                SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//                // 使用sessionFactory创建session对象
//                Session session = sessionFactory.openSession();
//        ) {
//            // 开启事务
//            Transaction transaction = session.beginTransaction();
//            // CRUD操作
//            User user = User.builder()
//                    .username("bingbaihanji")
//                    .password("123456")
//                    .address("china")
//                    .build();
//            session.save(user);
//            // 提交事务
//            transaction.commit();
//        }

        // 查询

//        try (
//                SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//                // 使用sessionFactory创建session对象
//                Session session = sessionFactory.openSession();
//        ) {
//            // 开启事务
//            Transaction transaction = session.beginTransaction();
//            // CRUD操作
//            // get 查询
//            // User user = session.get(User.class, 1);
//            // System.out.println(user.toString());
//
//            User load = session.load(User.class, 4);
//            System.out.println(load);
//            // 提交事务
//            transaction.commit();
//        }

        // 更新
//        try (
//                SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//                // 使用sessionFactory创建session对象
//                Session session = sessionFactory.openSession();
//        ) {
//            // 使用sessionFactory创建session对象
//            // 开启事务
//            Transaction transaction = session.beginTransaction();
//            // CRUD操作
//            User user = session.load(User.class, 8);
//            log.info(user.toString());
//            log.error(user.toString());
//            log.debug(user.toString());
//            log.warn(user.toString());
//            user.setUsername("孙耀鹏");
//            session.update(user);
//            log.info(session.load(User.class, 8).toString());
//            // 提交事务
//            transaction.commit();
//        }
//        SystemUtil systemUtil = new SystemUtil();
//        String pid = systemUtil.getPid();
//
//        log.info("pid为{}", pid);
//        log.info(String.valueOf(Thread.currentThread().threadId()));
//        log.info(String.valueOf(pid.equals(String.valueOf(Thread.currentThread().threadId()))));
//
//        Thread.sleep(1000 * 60 * 2);

        // 删除
//        try (
//                SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//                // 使用sessionFactory创建session对象
//                Session session = sessionFactory.openSession();
//        ) {
//
//            // 开启事务
//            Transaction transaction = session.beginTransaction();
//            // CRUD操作
//            // (1) 根据id查询出对象 然后删除
//            User user = session.get(User.class, 9);
//            log.info("查询出来的User为: {}", user.toString());
//            // 删除
//            session.delete(user);
//            // 提交事务
//            transaction.commit();
//        }

//          验证hibernate一级缓存
//
//        try (
//
//                SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//                Session session = sessionFactory.openSession()
//        ) {
//
//            // 使用sessionFactory创建session对象
//
//            // 开启事务
//            Transaction transaction = session.beginTransaction();
//            // CRUD操作
//            // (1) 根据id查询出对象
//            User user = session.get(User.class, 6);
//            log.info("查询出来的User为: {}", user.toString());
//            User user2 = session.get(User.class, 6);
//            log.info("查询出来的User2为: {}", user2.toString());
//
//            log.info("结果是否相等:{}", user.equals(user2));
//            log.info("结果是否相等:{}", user == user2);
//            // 提交事务
//            transaction.commit();
//        }

        // 优化session使用对象
//        Transaction transaction = null;
//        try (
//
//                SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
//                Session session = sessionFactory.openSession()
//        ) {
//
//            // 使用sessionFactory创建session对象
//
//            // 开启事务
//            transaction = session.beginTransaction();
//            // CRUD操作
//            User user = session.load(User.class, 8);
//            log.info(user.toString());
//            user.setUsername("波比");
//            session.update(user);
//            log.info(session.load(User.class, 8).toString());
//            // 提交事务
//            User user1 = session.get(User.class, 3);
//            log.info(user1.toString());
//            transaction.commit();
//        } catch (Exception e) {
//            log.error("系统错误操作异常参数为: ", e);
////            // 事务回滚
//            assert transaction != null;
//            transaction.rollback();
//        }

        Transaction transaction = null;
        try (

                SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
                Session session = sessionFactory.openSession()
        ) {

            // 使用sessionFactory创建session对象

            // 开启事务
            transaction = session.beginTransaction();
            // CRUD操作


            // 提交事务
            transaction.commit();
        } catch (Exception e) {
            log.error("系统错误操作异常参数为: ", e);
//            // 事务回滚
            assert transaction != null;
            transaction.rollback();
        }


        // 加载主配置文件封装成对象(指定配置文件)
//        URL resource = Main.class.getClassLoader().getResource("hibernate.cfg.xml");
//        Configuration configuration = new Configuration().configure(resource);
//
//        // 加载主配置文件封装成对象(默认配置文件在src目录下)
//        // Configuration configuration = new Configuration();
//        // configuration.configure();
//
//        // 创建SessionFactory对象
//        try (SessionFactory sessionFactory = configuration.buildSessionFactory()) {
//            // 使用sessionFactory创建session对象
//            Session session = sessionFactory.openSession();
//            // 开启事务
//            Transaction transaction = session.beginTransaction();
//            // CRUD操作
//            User user = User.builder()
//                    .username("bingbaihanji")
//                    .password("123456")
//                    .address("china")
//                    .build();
//            session.save(user);
//
//            // 提交事务
//            transaction.commit();
//            // 关闭资源(try-with-resources语法处理)
//        }
    }
}